#define _GNU_SOURCE
#include "daemon_runner.h"
#include "daemon_process.h"
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <fcntl.h>
#include <signal.h>


static SubProcess  *processes[PROCESS_NUM];
static is_running = 1;
static void signal_handler(int signo){
    is_running = 0;
}
void daemon_runner_run(void){
    //将守护进程变为后台
    daemon(0,1); //需要 _GNU_SOURCE //前面0 表示不改变工作目录（如果是外挂硬盘的程序建议改为1），后面1表示不会将重定向标准输入输出到/dev/null
    //调整输入输出 到某个日志文件中
    close(STDIN_FILENO); //0
    close(STDOUT_FILENO); //1
    close(STDERR_FILENO); //2
    open("/dev/null",O_RDWR); //0
    open(LOG_FILE,O_RDWR|O_CREAT|O_APPEND,0644);//1
    open(LOG_FILE,O_RDWR|O_CREAT|O_APPEND,0644);//2

    processes[0] = daemon_process_initSubProcess("app");
    processes[1] = daemon_process_initSubProcess("ota");


    signal(SIGTERM,signal_handler);

    while(is_running){
        for(int i=0;i<PROCESS_NUM;i++){
            if(processes[i]!=NULL)
            {
                daemon_process_startSubProcess(processes[i]);
            }
            sleep(1); //每隔一秒检查一次
        }
    }
    //退出 ，循环停止各个子进程释放
    for (int i = 0; i < PROCESS_NUM; i++)
    {   
        daemon_process_stopSubProcess(processes[i]);
        /* code */
    }
    

    


}